iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
1
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 18

不要太認真學 Python! - Day 21

  • 分享至 

  • xImage
  •  

[前情提要]

我昨天成功讓我的「水仙花數」執行了。
但是也犯了很愚蠢的錯誤...
https://ithelp.ithome.com.tw/upload/images/20190922/20120423jx9dyASmWx.jpg

不多說,開始正題。


昨天雖然成功執行了,但是今天不死心,還是想要把那個 num 改成個、十、百位的英文。

於是,我回去重新看了一遍關鍵字、識別字的教程,才發現了我犯了最基本的錯誤!!!

https://ithelp.ithome.com.tw/upload/images/20190922/20120423Eo4Y24zfrN.jpg

識別字最基本觀念

識別字可以自行定義,但是若要用兩個以上單字來註記,必須要將它改成連續的unicode字元,中間不能用空格,要用_

於是,我就修正好了我的程式碼

for num in range(1, 1000):
    Hundreds_digits = num // 100
    Ten_digits = num // 10 % 10
    Digits = num % 10
    
    if num == Hundreds_digit ** 3 +  Ten_digits ** 3 + Digits ** 3:
        print(num)

就可以成功運行啦!!!


現在要來思考昨天提到的另一個問題,就是該怎麼讓10以下的「水仙花數」出現。

上面原作提供的算式是假定原本就是三位數的「水仙花數」,沒有將只有一位數的「水仙花數」考慮進去。

因此,我的思考點是將一個數字假設是 153,拆成 1100+510+3。
想是很簡單,但是實際要轉換成程式就變得跟啞巴一樣,不知道該怎麼下手耶...

再試過幾個非常失敗,而且寫到後來不知道自己在寫什麼的code寫法之後。
我想起,古人說的對...「凡事都是從模仿而來的」(有人說過嗎
所以,我決定...

上網問谷歌!!!)沒志氣

於是乎,我找到了我自己看起來覺得很厲害的程式碼。
為什麼我會覺得很厲害呢?因為它最短)很爛的辨別方式我知道

  print('輸出所有水仙花數:' )
  for i in range(0,100001):
  	       temp=i
  	       sum=0
  	       a=len(str(i))
  	       while temp:
  		       sum+=(temp%10)**a
  		       temp//=10
  		       if sum==i:
  			       print(i,end='  ')

作者:yang元祐
連結:https://www.zhihu.com/question/21872507/answer/130662819
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

但是,又有一個問題了。
為什麼我複製貼上到 Anaconda,卻沒有任何反應呢?

https://ithelp.ithome.com.tw/upload/images/20190922/20120423oiSKrgWhZu.jpg

難道大神的程式只能遠觀嗎?
總之,明天再試試看,不行的話就...

https://ithelp.ithome.com.tw/upload/images/20190922/20120423kZrUW8Kuzt.jpg

好啦,還是會努力的,只是想要作更多嘗試而已。

今天不熬夜
收工!!!


不要太認真學 Python! - Day 20


上一篇
不要太認真學 Python! - Day 20
下一篇
不要太認真學 Python! - Day 22
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言